package top.shiyiri.collection;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @author Aunean
 * @date 2022/1/5
 */
/*
集合元素的遍历操作，使用迭代器 Iterator 接口
1.内部的方法：hasNext() 和 next()
2.集合对象每次调用 iterator() 方法都得到一个全新的迭代器对象，默认游标都在集合的第一个元素之前
3.内部定义了 remove()，可用在遍历的时候，删除集合中的元素。此方法不同于集合直接调用 remove()
 */
public class IteratorTest {
    Collection<Object> list = new ArrayList<>();
     {
        list.add(123);
        list.add(324);
        list.add(new String("Tom"));
        list.add(false);
        list.add(new Person("Jerry", 20));
        Person anna = new Person("Anna", 23);
        list.add(anna);
    }

    @Test
    public void test1() {

        Iterator<Object> iterator = list.iterator();
        //hasNext()：判断是否还有下一个元素
        for (;iterator.hasNext();) {
            System.out.println(iterator.next());
        }
    }


    //测试 Iterator 中的 remove()
    @Test
    public void test2() {
        Iterator<Object> iterator = list.iterator();

        //hasNext()：判断是否还有下一个元素
        for (;iterator.hasNext();) {
            Object next = iterator.next();
            if ("Tom".equals(next)) {
                iterator.remove();
            }
        }

        iterator = list.iterator();
        for (;iterator.hasNext();) {
            System.out.println(iterator.next());
        }
    }
}
